﻿using System;
using System.Windows.Forms;
using BadgeManager.Controller;
using BadgeManager.Model;

namespace Badge_Manager.View
{
    public partial class frmAule : Form
    {
        private StatoForm Stato;
        private ctrlStanza cStanza;
        private Utente Utente;
        private Stanza stanza;

        public frmAule(Utente utente, StatoForm stato)
        {
            InitializeComponent();
            this.Utente = utente;
            this.Stato = stato;
            this.ControllaPermessi();
            cStanza = new ctrlStanza();

            this.Elenco();
        }

        private void CambiaStato(StatoForm stato)
        {
            this.Text = "Aule";
            switch (stato)
            {
                case StatoForm.Nuovo:
                    this.Text += " [Nuovo]";
                    break;
                case StatoForm.Modifica:
                    this.Text += " [Modifica]";
                    break;
            }
        }

        private void ControllaPermessi()
        {
            if (Utente != null)
            {
                ctrlUtente cUtente = new ctrlUtente();
                if (!(cUtente.PuoModificare(Utente) ||
                    cUtente.PuoScrivere(Utente)))
                {
                    cmdAggiungi.Enabled = false;
                    cmdCancella.Enabled = false;
                }
            }
        }

        private void Elenco()
        {
            gridAule.DataSource = null;
            gridAule.DataSource =
                cStanza.SelectAll("SELECT id as Id,numero as Aula,capienza as Capienza FROM Stanze");

            gridAule.Columns["Id"].Visible = false;
        }

        public void AggiornaDaEsterno()
        {
            Elenco();
        }

        private void Pulisci()
        {
            foreach (Control x in pnl1.Controls)
            {
                if (x is TextBox)
                    x.Text = "";
            }
        }

        private void cmdAnnulla_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Cancella()
        {
            if (gridAule.Rows.Count > 0
                && gridAule.SelectedRows.Count == 1)
            {
                DialogResult scelta = MessageBox.Show(@"Vuoi cancellare l'aula?", "Attenzione",
                MessageBoxButtons.YesNo, MessageBoxIcon.Information);

                if (scelta == System.Windows.Forms.DialogResult.Yes)
                {
                    try
                    {
                        cStanza.EliminaStanza((Guid)gridAule.SelectedRows[0].Cells["Id"].Value);
                    }
                    catch (StanzaAssociataAdAttivita ex)
                    {
                        MessageBox.Show(ex.Message + "\n Impossibile Eliminare"
                            , "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    this.Elenco();
                }
            }
        }

        private void cmdCancella_Click(object sender, EventArgs e)
        {
            this.Cancella();
        }

        private void cmdAggiungi_Click(object sender, EventArgs e)
        {
            if (txtNumero.Text == "" &&
                txtCapienza.Text == "")
            {
                MessageBox.Show("I dati obbligatori non sono stati inseriti");
                return;
            }
            if (string.IsNullOrEmpty(txtNumero.Text))
            {
                MessageBox.Show("Il campo Numero non può essere vuoto!"
                    , "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNumero.Focus();
                return;
            }
            if (string.IsNullOrEmpty(txtCapienza.Text))
            {
                MessageBox.Show("Il campo Capienza non può essere vuoto!"
                    , "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCapienza.Focus();
                return;
            }
            stanza = new Stanza();
            int numero;
            if (!int.TryParse(txtNumero.Text, out numero))
            {
                MessageBox.Show("Valore di Numero non Valido!"
                    , "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNumero.Focus();
                return;
            }
            stanza.Numero = numero;
            int capienza;
            if (!int.TryParse(txtCapienza.Text, out capienza))
            {
                MessageBox.Show("Valore di Capienza non Valido!"
                    , "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNumero.Focus();
                return;
            }
            stanza.Capienza = capienza;
            try
            {
                if (Stato == StatoForm.Nuovo)
                    cStanza.InserisciStanza(stanza);

                else if (Stato == StatoForm.Modifica)
                {
                    stanza.Id = (Guid)gridAule.SelectedRows[0].Cells["Id"].Value;
                    cStanza.UpdateStanza(stanza);
                    CambiaStato(StatoForm.Nuovo);
                }
            }
            catch (NumeroStanzaDuplicata ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
            catch (ImpossibileInserire ex)
            {
                MessageBox.Show(ex.Message + "/n Stanza non Inserita Correttamente"
                    , "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            Elenco();
        }

        private void gridAule_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (gridAule.Rows.Count > 0
                && gridAule.SelectedRows.Count == 1)
            {
                CambiaStato(StatoForm.Modifica);
                Stato = StatoForm.Modifica;
                txtNumero.Text = gridAule.SelectedRows[0].Cells["Aula"].Value.ToString();
                txtCapienza.Text = gridAule.SelectedRows[0].Cells["Capienza"].Value.ToString();
            }
        }
    }
}